/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jjsoft.celularessuc.gco.ui;

import com.jjsoft.celularessuc.gco.mdl.Cliente;
import com.jjsoft.celularessuc.gco.mdl.DeudaCliente;
import com.jjsoft.celularessuc.gco.mdl.Sucursal;
import com.jjsoft.celularessuc.gco.neg.ClienteManager;
import com.jjsoft.celularessuc.gco.neg.DeudaClienteManager;
import com.jjsoft.celularessuc.gco.neg.MensualidadManager;
import com.jjsoft.celularessuc.gco.neg.SendMailSSL;
import com.jjsoft.celularessuc.gco.neg.SucursalManager;
import com.jjsoft.celularessuc.gco.util.CNumeros;
import com.jjsoft.celularessuc.gco.util.CSelecciones;
import com.jjsoft.celularessuc.gco.util.EnvioMailException;
import com.jjsoft.celularessuc.gco.util.MiModelo;
import com.jjsoft.celularessuc.gco.util.ValidarAtributoUtil;
import com.jjsoft.celularessuc.gco.util.configuraciones;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.MessagingException;
import javax.swing.JOptionPane;

/**
 *
 * @author Johnny
 */
public class VReporteDeudasClientes extends javax.swing.JFrame {

    /**
     * Creates new form VReporteDeudasClientes
     */
    DeudaClienteManager dcm = new DeudaClienteManager();
    SucursalManager sm = new SucursalManager();
    List<Sucursal> sucursales;
    List<DeudaCliente> listaDeudas;
    Cliente cliente = new Cliente();
    ClienteManager cm = new ClienteManager();

    public VReporteDeudasClientes() {
        initComponents();
        cargaSucursales();
        listaDeudas = dcm.listarPorSucursal(configuraciones.getInstance().getSucursal());
        cargarDeudas();
        if (configuraciones.getInstance().getUsuario().getRol() != 1) {
            cboSucursal.setVisible(false);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        cboEstado = new javax.swing.JComboBox();
        jLabel3 = new javax.swing.JLabel();
        cboSucursal = new javax.swing.JComboBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        dtgDeuda = new javax.swing.JTable();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        txtCedula = new javax.swing.JTextField();
        cmdSeleccionarCliente = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        cmdBuscarPorCliente = new javax.swing.JButton();
        cboMostrarTodos = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        cmdVerPagos1 = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLabel1.setFont(new java.awt.Font("Ubuntu", 1, 18)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Reporte de Deudas de Clientes");

        jLabel2.setText("Estado de la Deuda:");

        cboEstado.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Todos", "Pagada", "Vigente", "Vencida" }));
        cboEstado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cboEstadoActionPerformed(evt);
            }
        });

        jLabel3.setText("Sucursal:");

        cboSucursal.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Todas" }));
        cboSucursal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cboSucursalActionPerformed(evt);
            }
        });

        dtgDeuda.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jScrollPane1.setViewportView(dtgDeuda);

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel4.setForeground(new java.awt.Color(0, 51, 255));
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText("Buscar por Cliente:");

        jLabel5.setText("Cedula/Ruc:");

        txtCedula.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCedulaKeyPressed(evt);
            }
        });

        cmdSeleccionarCliente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/search-database.png"))); // NOI18N
        cmdSeleccionarCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdSeleccionarClienteActionPerformed(evt);
            }
        });

        jLabel6.setText("Nombre:");

        txtNombre.setEditable(false);

        cmdBuscarPorCliente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/buscar.png"))); // NOI18N
        cmdBuscarPorCliente.setText("Buscar");
        cmdBuscarPorCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdBuscarPorClienteActionPerformed(evt);
            }
        });

        cboMostrarTodos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/listar.png"))); // NOI18N
        cboMostrarTodos.setText("Mostrar Todos");
        cboMostrarTodos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cboMostrarTodosActionPerformed(evt);
            }
        });

        cmdVerPagos1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/listar.png"))); // NOI18N
        cmdVerPagos1.setText("Ver Pagos");
        cmdVerPagos1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdVerPagos1ActionPerformed(evt);
            }
        });

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/gmail.png"))); // NOI18N
        jButton1.setText("Enviar Recordatorio de Pago");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1)
                            .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel2)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(cboEstado, javax.swing.GroupLayout.PREFERRED_SIZE, 186, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(18, 18, 18)
                                        .addComponent(jLabel3)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(cboSucursal, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel5)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(txtCedula, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(cmdSeleccionarCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(jLabel6)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, 299, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(cmdBuscarPorCliente)))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(cboMostrarTodos))))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(cmdVerPagos1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton1)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(cboEstado, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(cboSucursal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel4)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(15, 15, 15)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtCedula, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel5)))
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(cmdSeleccionarCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jLabel6)
                                .addComponent(cmdBuscarPorCliente)
                                .addComponent(cboMostrarTodos, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addGap(18, 18, 18)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(cmdVerPagos1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        setSize(new java.awt.Dimension(875, 513));
        setLocationRelativeTo(null);
    }// </editor-fold>//GEN-END:initComponents

    private void cmdSeleccionarClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdSeleccionarClienteActionPerformed
        // TODO add your handling code here:
        CSelecciones.texto1 = txtCedula;
        CSelecciones.texto2 = txtNombre;
        new VSeleccionCliente().show();

    }//GEN-LAST:event_cmdSeleccionarClienteActionPerformed

    private void txtCedulaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCedulaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == 10) {
            cliente = cm.buscarPorCedula(txtCedula.getText());
            if (cliente != null) {
                CSelecciones.cliente = cliente;
                txtNombre.setText(cliente.getNombres() + " " + cliente.getApellidos());
            } else {
                JOptionPane.showMessageDialog(rootPane, "No se encontró ningun cliente con ese número de cédula/RUC", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//GEN-LAST:event_txtCedulaKeyPressed

    private void cmdBuscarPorClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdBuscarPorClienteActionPerformed
        // TODO add your handling code here:
        if (CSelecciones.cliente == null) {
            JOptionPane.showMessageDialog(rootPane, "No se ha seleccionado un cliente", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                listaDeudas = dcm.listarPorCliente(CSelecciones.cliente);
            } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, cboEstado.getSelectedIndex() - 1);
            } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                listaDeudas = dcm.listaDeudasVencidas(CSelecciones.cliente);
            } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 0) {
                listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1));
            } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1), cboEstado.getSelectedIndex() - 1);
            } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 3) {
                listaDeudas = dcm.listaDeudasVencidas(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1));
            }
            if (listaDeudas != null && !listaDeudas.isEmpty()) {
                cargarDeudas();
            } else {
                limpiarDeudas();
            }

        }
    }//GEN-LAST:event_cmdBuscarPorClienteActionPerformed

    private void cboMostrarTodosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboMostrarTodosActionPerformed
        // TODO add your handling code here:
        CSelecciones.cliente = null;
        txtCedula.setText("");
        txtNombre.setText("");
        if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
            listaDeudas = dcm.listarTodas();
        } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
            listaDeudas = dcm.listarPorEstado(cboEstado.getSelectedIndex() - 1);
        } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
            listaDeudas = dcm.listaDeudasVencidas();
        } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 0) {
            listaDeudas = dcm.listarPorSucursal(sucursales.get(cboSucursal.getSelectedIndex() - 1));
        } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
            listaDeudas = dcm.listarPorEstado(cboEstado.getSelectedIndex() - 1, sucursales.get(cboSucursal.getSelectedIndex() - 1));
        } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 3) {
            listaDeudas = dcm.listaDeudasVencidas(sucursales.get(cboSucursal.getSelectedIndex() - 1));
        }
        if (listaDeudas != null && !listaDeudas.isEmpty()) {
            cargarDeudas();
        } else {
            limpiarDeudas();
        }
    }//GEN-LAST:event_cboMostrarTodosActionPerformed

    private void cboEstadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboEstadoActionPerformed
        // TODO add your handling code here:
        if (evt.getModifiers() == 16) {
            if (CSelecciones.cliente != null) {
                if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente);
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, cboEstado.getSelectedIndex() - 1);
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listaDeudasVencidas(CSelecciones.cliente);
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1));
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1), cboEstado.getSelectedIndex() - 1);
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 3) {
                    listaDeudas = dcm.listaDeudasVencidas(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1));
                }
                if (listaDeudas != null && !listaDeudas.isEmpty()) {
                    cargarDeudas();
                } else {
                    limpiarDeudas();
                }
            } else {
                if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarTodas();
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorEstado(cboEstado.getSelectedIndex() - 1);
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listaDeudasVencidas();
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarPorSucursal(sucursales.get(cboSucursal.getSelectedIndex() - 1));
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorEstado(cboEstado.getSelectedIndex() - 1, sucursales.get(cboSucursal.getSelectedIndex() - 1));
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 3) {
                    listaDeudas = dcm.listaDeudasVencidas(sucursales.get(cboSucursal.getSelectedIndex() - 1));
                }
                if (listaDeudas != null && !listaDeudas.isEmpty()) {
                    cargarDeudas();
                } else {
                    limpiarDeudas();
                }
            }
        }
    }//GEN-LAST:event_cboEstadoActionPerformed

    private void cboSucursalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboSucursalActionPerformed
        // TODO add your handling code here:
        if (evt.getModifiers() == 16) {
            if (CSelecciones.cliente != null) {
                if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente);
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, cboEstado.getSelectedIndex() - 1);
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listaDeudasVencidas(CSelecciones.cliente);
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1));
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorCliente(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1), cboEstado.getSelectedIndex() - 1);
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 3) {
                    listaDeudas = dcm.listaDeudasVencidas(CSelecciones.cliente, sucursales.get(cboSucursal.getSelectedIndex() - 1));
                }
                if (listaDeudas != null && !listaDeudas.isEmpty()) {
                    cargarDeudas();
                } else {
                    limpiarDeudas();
                }
            } else {
                if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarTodas();
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorEstado(cboEstado.getSelectedIndex() - 1);
                } else if (cboSucursal.getSelectedIndex() == 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listaDeudasVencidas();
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 0) {
                    listaDeudas = dcm.listarPorSucursal(sucursales.get(cboSucursal.getSelectedIndex() - 1));
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() < 3) {
                    listaDeudas = dcm.listarPorEstado(cboEstado.getSelectedIndex() - 1, sucursales.get(cboSucursal.getSelectedIndex() - 1));
                } else if (cboSucursal.getSelectedIndex() > 0 && cboEstado.getSelectedIndex() == 3) {
                    listaDeudas = dcm.listaDeudasVencidas(sucursales.get(cboSucursal.getSelectedIndex() - 1));
                }
                if (listaDeudas != null && !listaDeudas.isEmpty()) {
                    cargarDeudas();
                } else {
                    limpiarDeudas();
                }
            }
        }
    }//GEN-LAST:event_cboSucursalActionPerformed

    private void cmdVerPagos1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdVerPagos1ActionPerformed
        // TODO add your handling code here:
        if (dtgDeuda.getSelectedRow() != -1) {
            new VVerPagosSimplesCliente(listaDeudas.get(dtgDeuda.getSelectedRow())).show();
        } else {
            JOptionPane.showMessageDialog(rootPane, "Seleccione una deuda para ver el historia de pagos", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_cmdVerPagos1ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        if (dtgDeuda.getSelectedRow() != -1) {
            String titulo = "Recordatorio " + configuraciones.getInstance().getConfiguracion().getNombreLocal();
            DeudaCliente objDeuda = listaDeudas.get(dtgDeuda.getSelectedRow());
            if (objDeuda.getCedulaCliente().getEmail() == null || objDeuda.getCedulaCliente().getEmail().equals("")) {
                JOptionPane.showMessageDialog(rootPane, "El cliente no tienen registrada una dirección de correo electrónico", "Error", JOptionPane.ERROR_MESSAGE);
                return;
            }
            if (!ValidarAtributoUtil.validateEmail(objDeuda.getCedulaCliente().getEmail())) {
                JOptionPane.showMessageDialog(rootPane, "Existe un error en la dirección de correo electrónico del cliente.", "Error", JOptionPane.ERROR_MESSAGE);
                return;
            }
            String mensaje="";
            if(objDeuda.getTipo()==0)
                mensaje = "Estimado/a cliente de " + configuraciones.getInstance().getConfiguracion().getNombreLocal() + ". \n\nLe recordamos que mantiene una deuda pendiente por el monto de: " + CNumeros.redondear(objDeuda.getSaldoActual()) + " con fecha de vencimiento: " + objDeuda.getFechaVencimiento().toLocaleString().split(" ")[0] + " por el concepto de " + objDeuda.getConcepto() + ". Por lo que solicitamos de la manera más comedida se acerque a cancelar dicho saldo en la brevedad posible en nuestro local ubicado en las calles: " + configuraciones.getInstance().getConfiguracion().getDireccion() + ".\n\nPara mayor información comuniquese a nuestro teléfono: " + configuraciones.getInstance().getConfiguracion().getTelefono() + " o directamente en nuestro local. \n\nSaludos Cordiales\n" + configuraciones.getInstance().getConfiguracion().getNombreLocal() + " \n\nPor favor no marque este mensaje como spam";
            else
                mensaje = "Estimado/a cliente de " + configuraciones.getInstance().getConfiguracion().getNombreLocal() + ". \n\nLe informamos que tiene "+new MensualidadManager().getMensualidadesVencidas(objDeuda)+" mensualidades vencidas  por el concepto de " + objDeuda.getConcepto() + ". Por lo que solicitamos de la manera más comedida se acerque a cancelar dicho saldo en la brevedad posible en nuestro local ubicado en las calles: " + configuraciones.getInstance().getConfiguracion().getDireccion() + ".\n\nPara mayor información comuniquese a nuestro teléfono: " + configuraciones.getInstance().getConfiguracion().getTelefono() + " o directamente en nuestro local. \n\nSaludos Cordiales\n" + configuraciones.getInstance().getConfiguracion().getNombreLocal() + " \n\nPor favor no marque este mensaje como spam";
            try {
                new SendMailSSL().sendMail(objDeuda.getCedulaCliente().getEmail(), titulo, mensaje);
                JOptionPane.showMessageDialog(rootPane, "Mensaje Enviado correctamente");
            } catch (MessagingException ex) {
                JOptionPane.showMessageDialog(rootPane, ex.getLocalizedMessage(), "Error al enviar el correo", JOptionPane.ERROR_MESSAGE);
                return;
            } catch (EnvioMailException ex) {
                JOptionPane.showMessageDialog(rootPane, ex.getMessage(), "Error al enviar el correo", JOptionPane.ERROR_MESSAGE);
            }

        } else {
            JOptionPane.showMessageDialog(rootPane, "Seleccione  deuda para enviar el recordatorio", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    /**
     * @param args the command line arguments
     */
    private void cargaSucursales() {
        sucursales = sm.listarSucursals();
        for (Sucursal sucursal : sucursales) {
            cboSucursal.addItem(sucursal.getNombre());
            if (sucursal.equals(configuraciones.getInstance().getSucursal())) {
                cboSucursal.setSelectedItem(sucursal.getNombre());
            }
        }
    }

    private void cargarDeudas() {
        MiModelo modelo = new MiModelo();
        String[] identificadores = {"C.I/RUC", "Nombres", "Concepto", "Fecha", "Monto", "Saldo", "Tipo", "F. Vencimiento", "Sucursal", "Estado"};
        modelo.setColumnIdentifiers(identificadores);

        double saldo = 0;
        for (DeudaCliente deuda : listaDeudas) {
            String fVencimiento = "";
            String estado = "";
            if (deuda.getEstado() == 0) {
                estado = "Pagada";
            } else if (deuda.getEstado() == 1) {
                if (deuda.getTipo() == 0) {
                    try {
                        if (deuda.getFechaVencimiento().compareTo(new Date()) < 0) {
                            estado = "Vencida";
                        } else {
                            estado = "Vigente";
                        }
                    } catch (Exception ex) {
                        estado = "Vigente";
                    }
                }else{
                    MensualidadManager mm = new MensualidadManager();
                    estado = mm.getMensualidadesVencidas(deuda)+ " Meses Vencidos";
                }

            }
            String tipo = "";
            tipo = (deuda.getTipo() == 0 ? "Simple" : "Mensualidades");

            if (deuda.getFechaVencimiento() != null) {
                fVencimiento = deuda.getFechaVencimiento().toLocaleString().split(" ")[0];
            }
            String[] itemDeuda = {deuda.getCedulaCliente().getCedula(), deuda.getCedulaCliente().getNombres() + " " + deuda.getCedulaCliente().getApellidos(), deuda.getConcepto(), deuda.getFecha().toLocaleString().split(" ")[0], CNumeros.Formato(deuda.getMontoInicial()), CNumeros.Formato(deuda.getSaldoActual()), tipo, fVencimiento, deuda.getIdSucursal().getNombre(), estado};
            modelo.addRow(itemDeuda);
            saldo += deuda.getSaldoActual();
        }
        //   this.txtDeudaTotal.setText(CNumeros.Formato(saldo));
        this.dtgDeuda.setModel(modelo);
        this.dtgDeuda.getColumn("Concepto").setPreferredWidth(200);
    }

    private void limpiarDeudas() {
        MiModelo modelo = new MiModelo();
        this.dtgDeuda.setModel(modelo);
        //  txtDeudaTotal.setText("");
    }

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(VReporteDeudasClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(VReporteDeudasClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(VReporteDeudasClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(VReporteDeudasClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new VReporteDeudasClientes().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox cboEstado;
    private javax.swing.JButton cboMostrarTodos;
    private javax.swing.JComboBox cboSucursal;
    private javax.swing.JButton cmdBuscarPorCliente;
    private javax.swing.JButton cmdSeleccionarCliente;
    private javax.swing.JButton cmdVerPagos1;
    private javax.swing.JTable dtgDeuda;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTextField txtCedula;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables
}
